package com.qf.smsplatform.controller.swagger;
/*2021/11/3*/

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * @YuTao
 */
@Configuration
@EnableSwagger2//开启swagger
public class SwaggerConfig {

    /*
    创建API的基本信息，显示在页面当中
    访问地址：http://localhost:8080/项目地址/swagger-ui.html
     */
    @Bean
    public ApiInfo apiInfo(){
        return new ApiInfoBuilder()
                .version("2.1.0.alpha")
                .description("smsplatform")
                .title("短信平台管理项目")
                .license("apache2.0")
                .licenseUrl("https://www.apache.org/licenses/LICENSE-2.0")
                .contact(new Contact("wyf","massageManage@163.com","北京市昌平区" ))
                .build();
    }

    /*
    创建API应用
    apiInfo（）增加相关的信息
    通过select（）函数返回一个ApiSelectorBuilder实例，用来控制哪些接口暴露给API接口来实现
     */
    @Bean
    public Docket docket(ApiInfo apiInfo){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo)
                .select().apis(RequestHandlerSelectors.basePackage("com.qf.smsplatform.controller"))
                .build();
    }



//    @Api：用在类上，说明该类的作用。
//    @ApiOperation：注解来给API增加方法说明。
//    @ApiImplicitParams : 用在方法上包含一组参数说明。
//    @ApiImplicitParam：用来注解来给方法入参增加说明。
//    @ApiResponses：用于表示一组响应
//    @ApiResponse：用在@ApiResponses中，一般用于表达一个错误的响应信息
//    @ApiModel：描述一个Model的信息（一般用在请求参数无法使用@ApiImplicitParam注解进行描述的时候）
//    @ApiModelProperty：描述一个model的属性
//　　其中
//　　　@ApiResponse参数：
//
//    code：数字，如400
//    message：信息，如“参数填写错误”
//    response：抛出异常的类
//    @ApiImplicitParam参数：
//    paramTpye：指定参数放在哪些地方（header/query/path/body/form）
//    name：参数名
//    dataTpye：参数类型
//    required：是否必输（true/false）
//    value：说明参数的意思
//    defaultValue：参数默认值
}
